package main

import (
	"fmt"
	"runtime"
	"time"
)

func Run2 () {
	fmt.Println("Run2 --------------------------------")

	// 循环只有 for 不使用()
	sum := 0
	for i := 0; i < 10; i++ {
		sum += i
	}
	fmt.Println(sum)

	// for 当做while使用
	for sum < 100 {
		sum += 10
	}
	fmt.Println(sum)

	// for 死循环
	// for {
	// 	sum++;
	// }

	// if 不使用()
	if sum < 100 {
		fmt.Println("Whats your problem?")
	}

	// if 可以定义临时变量
	if tmp := sum; tmp < 100 {
		fmt.Println("Do you have no phone?")
	} else { // 必须写成 "} else { 这样
		fmt.Println("Amd yes!")
	}

	// switch 默认带有break
	switch os := runtime.GOOS; os {
	case "darwin":
		fmt.Println("OS X.")
	case "linux":
		fmt.Println("Linux.")
	default:
		// freebsd, openbsd,
		// plan9, windows...
		fmt.Printf("%s.\n", os)
	}

	// switch 不使用条件
	hour := time.Now().Hour()
	switch {
	case hour < 12:
		fmt.Println("Good morning!")
	case hour < 17:
		fmt.Println("Good afternoon.")
	default:
		fmt.Println("Good evening.")
	}

	// defer 哈函数退出时反向执行 (解决了痛点)
	fmt.Println("open file 1")
	defer fmt.Println("close file 1")
	fmt.Println("open file 2")
	defer fmt.Println("close file 2")
	fmt.Println("open file 3")
	defer fmt.Println("close file 3")

	// defer 由栈实现
	for i := 0; i < 5; i++ {
		defer fmt.Printf("defer %d\n", i + 1)
	}
}